如果我有4个具有以下层次结构的类:classMainClass如何在不遍历和创建每个其他类的实例的情况下获得MainClass的子类列表?在新的IRBsession中,我可以进去说irb(main)>MainClass.descendants=>[]但是,如果我遍历并创建每个子类的实例,我将看到以下内容irb(main)>SubClassA.new=>#irb(main)>SubClassB.new=>#irb(main)>SubClassC.new=>#irb(main)>MainClass.descendants=>[SubClassA(...),SubClassB(...),Su
这个问题在这里已经有了答案:Strange,unexpectedbehavior(disappearing/changingvalues)whenusingHashdefaultvalue,e.g.Hash.new([])(4个答案)关闭7年前。我正在将项目添加到哈希键。我期待得到这样的结构:{'a':[1],'b':[2,3,4]}我使用数组来初始化哈希。irb>hash=Hash.new([])=>{}然后开始使用它:irb>hash['a'][1]irb>hash['b'][1,2]但事实证明:irb>hash=>{}
假设我有一个这样的数组:[{"player_id"=>1,"number_of_matches"=>2,"goals"=>5},{"player_id"=>2,"number_of_matches"=>4,"goals"=>10}]我想要所有球员每场比赛的平均进球数,不是每个球员的平均进球数,而是总平均进球数。我想用.each来做这件事并存储每个单独的平均值,最后将它们全部相加并除以我拥有的玩家数量。但是,我正在寻找一种Ruby/单行方式来执行此操作。 最佳答案 根据要求,一行:avg=xs.map{|x|x["goals"].to
我想知道为什么第二个解决方案有效,而第一个具有链式方法的解决方案却无效。这个链式方法不起作用:nopers=[5,6,7,8,9]classArraydefine_method(:trimy)doself.shift().pop()endend当我测试nopers.trimy()时,它给出了未定义的错误消息。"method'pop'for1:Fixnum,in'blockin'"并且只执行.pop()方法,删除5。但是,这个版本有效:yuppers=[1,2,3,4,5,6]classArraydefine_method(:trim)doself.shift()self.pop()en
我已经通过MapReduce获取了一些ID。我已经按照一些标准对这些ID进行了排序,现在我需要按照这个特定的顺序获取这些对象:MyModel.find(ids)对吧?但它返回的对象不在存储id的顺序中。看起来这和MyModel.where(:_id.in=>ids)它不会以与存储ID相同的顺序返回获取的对象。现在我可以做到了ids.map{|id|MyModel.find(id)}这将完成这项工作,但它会多次敲击数据库。 最佳答案 正在研究类似的问题并找到了更简洁的解决方案:objs=MyModel.find(ids).sort_b
有单词表和禁用词表。我想浏览单词列表并编辑所有禁用的单词。这就是我最终所做的(注意catchedbool值):puts"Giveinputtext:"text=gets.chompputs"Giveredactedword:"redacted=gets.chompwords=text.split("")redacted=redacted.split("")catched=falsewords.eachdo|word|redacted.eachdo|redacted_word|ifword==redacted_wordcatched=trueprint"REDACTED"breakend
假设我有一个包含3个模型的Rails应用程序,Person、Place和Thing。SayThing使用单表继承,所以有FancyThing和ScaryThing子类。然后是用map.resources:people,:places,:things定义的路线。所以FancyThings和ScaryThings没有Controller,ThingsController处理这两种类型。现在假设我需要有代码来显示任何具有指向它们的链接的列表。如果我有这段代码:如果项目是一个人或一个地方,这很好用,polymorphic_path负责生成正确的路线。但是,如果item是FancyThing或S
有没有一种方法可以在Ruby中找到以特定字符串开头的所有变量?例如,我的ruby程序中有以下变量:ret_d=1ret_d2=23是否有返回["ret_d","ret_d2"]的函数?问题是我没有所有变量的集合。 最佳答案 Kernel#local_variables应该可以解决问题。>>ret_d=1=>1>>ret_d2=23=>23>>local_variables=>["_","ret_d","ret_d2"]>>local_variables.select{|v|v=~/^ret_/}=>["ret_d","ret
所以我知道您可以通过调用#instance_variables获取Ruby中的所有实例变量,但如果它们尚未设置,则它们不会显示。示例classWalrusattr_accessor:flippers,:tusksendw=Walrus.neww.instance_variables#=>[]w.tusks#=>nilw.instance_variables#=>[:@tusks]我想立即访问attr_accessor定义的所有实例变量。w=Walrus.neww.instance_variables#=>[:@tusks,:@flippers] 最佳答案
当我运行Rails控制台时,如何在单独的行中显示每个项目?而不是>Post.all=>#,#它会显示为>Post.all=>#,#类似于Perl调试器中的x。我试过了Post.all.each{|e|e.inspect+"\n"}但这只会让事情变得更糟,而且不是很方便。我看到了RubyonRails:prettyprintforvariable.hash_set.inspect...isthereawaytoprettyprint.inpsectintheconsole?和https://github.com/michaeldv/awesome_print但这似乎行不通irb(main